
package com.joysuch.wwyt.core.service;

import java.io.File;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.nio.charset.MalformedInputException;
import java.util.List;

import com.joysuch.wwyt.core.bean.BatchUploadInfoBean;

/**
 * zip压缩文件处理
 *
 * @since
 */
public interface ZipProcessService {

    /**
     * 批量上传文件。附件打包在压缩包中。根文件为目录，文件存放层级不超过maxDirDepth, 处理的文件后缀为avaliableSuffixes
     *
     * @param zip               压缩包数据流
     * @param saveInDb          是否保存到数据库中。true:保存，false:不保存
     * @param maxDirDepth       处理的最大目录深度
     * @param avaliableSuffixes 处理的文件后缀。为空表示按系统默认图片文件后缀处理
     * @return
     */
    List<BatchUploadInfoBean> batchUploadImages(InputStream zip, boolean saveInDb, int maxDirDepth, Charset charset,
                                                String... avaliableSuffixes) throws MalformedInputException;

    /**
     * {@link #batchUploadImages(InputStream, boolean, int, String...)}, maxDirDepth=1
     *
     * @param zip               压缩包数据流
     * @param saveInDb          是否保存到数据库中。true:保存，false:不保存
     * @param avaliableSuffixes 处理的文件后缀。为空表示按系统默认图片文件后缀处理
     * @return
     */
    List<BatchUploadInfoBean> batchUploadImages(InputStream zip, boolean saveInDb, String... avaliableSuffixes) throws MalformedInputException;

    /**
     * 批量上传附件。附件打包在压缩包中。根文件为目录，文件存放层级不超过maxDirDepth, 处理的文件后缀为avaliableSuffixes
     *
     * @param zip               压缩包数据流
     * @param saveInDb          是否保存到数据库中。true:保存，false:不保存
     * @param maxDirDepth       处理的最大目录深度
     * @param avaliableSuffixes 处理的文件后缀。为空表示按系统默认图片文件后缀处理
     * @return
     */
    List<BatchUploadInfoBean> batchUploadAttachments(InputStream zip, boolean saveInDb, int maxDirDepth,
                                                     Charset charset, String... avaliableSuffixes) throws MalformedInputException;

    /**
     * {@link #batchUploadImages(InputStream, boolean, int, String...)}, maxDirDepth=1
     *
     * @param zip               压缩包数据流
     * @param saveInDb          是否保存到数据库中。true:保存，false:不保存
     * @param avaliableSuffixes 处理的文件后缀。为空表示按系统默认图片文件后缀处理
     * @return
     */
    List<BatchUploadInfoBean> batchUploadAttachments(InputStream zip, boolean saveInDb, String... avaliableSuffixes) throws MalformedInputException;

    void deleteTempDir(String tempDir);

    /**
     * 复制文件
     *
     * @param file
     * @param newFile
     */
    void copyFile(File file, File newFile);

}
